package Algorithm.string;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @Desc:   翻转字符串里的单词
 *          给定一个字符串，逐个翻转字符串中的每个单词
 *
 *          示例 1：
 *
 *          输入: "the sky is blue"
 *          输出: "blue is sky the"
 *
 *          示例 2：
 *
 *          输入: "  hello world!  "
 *          输出: "world! hello"
 *          解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
 *          示例 3：
 *
 *          输入: "a good   example"
 *          输出: "example good a"
 *          解释: 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
 *
 *          说明：
 *
 *          无空格字符构成一个单词。
 *          输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
 *          如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
 *
 *
 * @author: cww
 * @DateTime: 2020/3/31 17:16
 */

public class ReverseWords {

    public static void main(String[] args) {
        System.out.println(reverseWords1("  hello world!  "));
    }

    public static String reverseWords(String s){
        String[] split = s.split(" +");
        StringBuilder sb = new StringBuilder();
        for(int i=split.length-1;i>=0;i--){
            if(!split[i].equals("")){
                if(i>0){
                    sb.append(split[i]).append(" ");
                } else{
                    sb.append(split[i]);
                }
            }
        }
        return sb.toString().trim();
    }

    public static String reverseWords1(String s){
        s.trim();
        List<String> list = Arrays.asList(s.split("\\s+"));
        Collections.reverse(list);
        return String.join(" ",list);
    }

}
















